home *** CD-ROM | disk | FTP | other *** search
/ Amiga Inside! / Amiga FD Inside (1995)(Ultramax).iso / berndspd / cli-tools / cmp / cmp.asm < prev    next >
Encoding:
Assembly Source File  |  1993-07-20  |  6.8 KB  |  388 lines

  1. ;Name:  CMP
  2.  
  3. ;History:
  4. ;begonnen am, Datum: 09.02.93
  5. ;17.02.93 erster assemblerlauf mit 145 Fehlern, nach 1/2 h nur noch 34 Fehler
  6. ;  Problem Lokale Variablen für Macros
  7. ;20.02.93 Option Quick, stellt den ersten Unterschied fest, und meldet diesen
  8. ;01.05.93 Umstellung auf 2.0 Benutzung, und Offsetangabe beim ProgStart
  9.  
  10.  
  11.  
  12. My_version    macro
  13.     dc.b    "2.00"
  14.     endm
  15. my_Date    macro
  16.     dc.b    "(01.05.93)"
  17.     endm
  18.  
  19.  
  20. *----------------------------------------------------------------------------------*
  21.  
  22. ;fest verwendete Register: siehe auch includes
  23.  
  24.  
  25. ;d3=Read len 1
  26. ;d4=Read len 2
  27. ;d5=Read 10000 max $eFFF wegen dbf
  28. ;d6=8 Byte Zähler
  29. ;d7=Flags #0=0 letzte Vergleich equ
  30. ;           =1                  nequ
  31.  
  32.  
  33. *----------------------------------------------------------------------------------*
  34.  
  35.  
  36. ;Verwendete Offsets und Variablen über (a5)
  37.  
  38. Link_Felder    equ    17    ;anzahl der benötigten felder eingeben
  39.  
  40. link_size    equ    Link_felder*-4    ;Felder *4 in bytes, aber negativ
  41.     rsset    link_size
  42.  
  43.  
  44. execbase        rs.l    1    ; plicht !!
  45. dosbase        rs.l    1    ; plicht !!
  46. input        rs.l    1    ; plicht !!
  47. output        rs.l    1    ; plicht !!
  48. Arg_Base        rs.l    1    ; plicht !! ev. intbase, gfxbase, ..
  49.  
  50. Arg_NAME1        rs.l    1
  51. Arg_NAME2        rs.l    1
  52. Arg_OFFSET1    rs.l    1
  53. Arg_OFFSET2    rs.l    1
  54. Arg_QUICK        rs.l    1
  55. Arg_HELP        rs.l    1
  56.  
  57. mem_read1_base    rs.l    1
  58. mem_read2_base    rs.l    1
  59. mem_Print_base    rs.l    1
  60. name1_base    rs.l    1
  61. name2_base    rs.l    1
  62. Byte        rs.l    1
  63.  
  64. link_    rs.l    1        ;der letzte erlaubte wert ist -4
  65.     ifgt    link_        ;ist >0
  66.     fail    Link Feld ist zu klein dimensioniert
  67.     endc
  68.  
  69.  
  70. Mem_read_len    equ    10000
  71. Mem_Print_len    equ    5000
  72.  
  73. ;Flaggs
  74.  
  75. *----------------------------------------------------------------------------------*
  76.  
  77. ;makros
  78.  
  79. type    macro            ;aufruf: type  quell,ziel
  80. .type\@    move.b    (\1),d0
  81.     cmp.b    #32,d0
  82.     blo.s    .hex_\@
  83.     cmp.b    #126,d0
  84.     bhi.s    .hex_\@
  85.     move.b    d0,(\2)+
  86.     bra.s    .next_\@
  87. .hex_\@    move.b    #".",(\2)+
  88. .next_\@
  89.     endm
  90.  
  91.  
  92. hextohex    macro
  93. .hextohex\@
  94.     move.b    (\1),d0
  95.     moveq    #\3*4,d1
  96.     ror.l    d1,d0
  97.     moveq    #\3-1,d1
  98. .next_\@    rol.l    #4,d0
  99.     move.b    d0,d2        ;retten
  100.     and.b    #$0f,d2        ;maske
  101.     add.b    #48,d2        ; ascii
  102.     cmp.b    #58,d2        ; >9
  103.     bcs.s    .out_\@
  104.     addq    #7,d2        ;a-f
  105. .out_\@    move.b    d2,(\2)+
  106.     dbf    d1,.next_\@(PC)
  107.     endm
  108.  
  109.  
  110. *----------------------------------------------------------------------------------*
  111.  
  112.  
  113.     incdir    include:
  114.     include    lvo/exec.i
  115.     include    lvo/dos.i
  116.     include    main/call_link.i
  117.  
  118.  
  119.  
  120. Programm    link    a5,#link_size
  121.     movem.l    d2-d7/a2-a3/a6,-(a7)
  122.     moveq    #0,d1
  123.     moveq    #~Link_size/4,d2
  124.     move.l    a5,a1
  125. .next    move.l    d1,-(a1)
  126.     dbf    d2,.next
  127.     moveq    #20,d6        ;returned ..
  128.  
  129.     moveq    #0,d0
  130.     lea    dosname(pc),a1
  131.     callexec    _LVOopenlibrary,execbase
  132.     move.l    d0,dosbase(a5)
  133.     beq    no_Dos
  134.     move.l    d0,a6
  135.     cmpi.w    #$25,$14(a6)
  136.     bcs    NoKS20        ;ned KS 2.0
  137.  
  138. Usage    lea    usage_txt(pc),a1
  139.     move.l    a1,d1
  140.     lea    Arg_name1(a5),a0    ;zeiger auf den arg-buffer
  141.     move.l    a0,d2
  142.     moveq    #0,d3        ;??
  143.     calldos    -$31e        ;Arg auswertung
  144.     move.l    d0,arg_base(a5)
  145.     beq    dos_error
  146.  
  147. output_    calldos    _LVOoutput
  148.     move.l    d0,output(a5)
  149.     beq    Prog_end
  150.  
  151.     tst.l    Arg_HELP(a5)
  152.     bmi    help
  153.  
  154.     move.l    #mem_Print_len,d0
  155.     moveq    #1,d1
  156.     callexec    _LVOallocmem,execbase
  157.     move.l    d0,Mem_print_base(a5)
  158.     beq    no_Mem
  159.  
  160.  
  161.     include    cmp_search.asm
  162.  
  163.  
  164. *-------Fail Routinen--------------------------------------------------------------*
  165.  
  166.  
  167. NoKS20    lea    open_CLI(pc),a0
  168.     move.l    a0,d1
  169.     move.l    #1006,d2
  170.     calldos    _LVOOpen
  171.     move.l    d0,d5
  172.     beq.s    .next        ;noopen
  173.     move.l    d5,d1
  174.     lea    NoKS20_txt(pc),a0
  175.     move.l    a0,d2
  176.     moveq    #NoKS20_txt_len,d3
  177.     calldos    _LVOWrite
  178.     move.l    d5,d1
  179.     calldos    _LVOClose
  180. .next    bra    closedos
  181.  
  182.  
  183. Dos_error    calldos    _LVOIOErr,dosbase
  184.     move.l    d0,d1
  185.     beq.s    .next
  186.     moveq    #0,d2        ;??
  187.     calldos    -$1da        ;Errortext ins shell ausgeben
  188. .next    bra    closeDos
  189.  
  190.  
  191. no_mem    lea    no_mem_txt(pc),a1
  192.     pea    Prog_end_1(pc)
  193.     moveq    #99,d6
  194.     bra    write
  195.  
  196.  
  197. break    lea    break_txt(pc),a1
  198.     pea    Prog_end_1(pc)
  199.     moveq    #5,d6
  200.     bra    write
  201.  
  202.  
  203. noopen    lea    noOpen_txt(pc),a0
  204.     move.l    a0,d1
  205.     move.l    a4,d2
  206.     calldos    -$3ba,dosbase
  207.     moveq    #10,d6
  208.     bra    Prog_end_1
  209.  
  210.  
  211.  
  212.  
  213. *-------Progr.-Ende----------------------------------------------------------------*
  214.  
  215.  
  216. Prog_end    moveq    #0,d6
  217. Prog_end_1
  218.  
  219.     move.l    dosbase(a5),a6
  220.     move.l    name1_base(a5),d1
  221.     beq.s    .next
  222.     calldos    _LVOClose
  223.  
  224. .next    move.l    name2_base(a5),d1
  225.     beq.s    mem_3
  226.     calldos    _LVOClose
  227.  
  228. mem_3    move.l    execbase(a5),a6
  229.     move.l    mem_Print_base(a5),a1
  230.     move.l    a1,d0            ;nur TST
  231.     beq.s    mem_2
  232.     move.l    #mem_Print_len,d0
  233.     callexec    _LVOfreeMem
  234.  
  235. mem_2    move.l    mem_read1_base(a5),a1
  236.     move.l    a1,d0            ;nur TST
  237.     beq.s    mem_1
  238.     move.l    #mem_read_len,d0
  239.     callexec    _LVOfreeMem
  240.  
  241. mem_1    move.l    mem_read2_base(a5),a1
  242.     move.l    a1,d0            ;nur TST
  243.     beq.s    .next
  244.     move.l    #mem_read_len,d0
  245.     callexec    _LVOfreeMem
  246.     bra.s    closedos
  247.  
  248. .next    move.l    arg_base(a5),d1
  249.     beq.s    closeDos
  250.     calldos    -$35a,dosbase
  251.  
  252. closedos    move.l    dosbase(a5),a1
  253.     callexec    _LVOcloselibrary,execbase
  254.  
  255. no_dos    move.l    d6,d0        ;Prog. returned ??
  256.     movem.l    (a7)+,d2-d7/a2-a3/a6
  257.     unlk    a5
  258.     rts
  259.  
  260.  
  261. *------------------Unterprogramme----Teil--1---------------------------------------*
  262.  
  263.  
  264. write    moveq    #0,d3
  265.     move.w    (a1)+,d3
  266.     move.l    a1,d2
  267.     move.l    output(a5),d1
  268.     calldos    _LVOwrite,dosbase
  269.     rts
  270.  
  271.  
  272. help    lea    Help_txt(pc),a1
  273.     pea    Prog_end(pc)
  274.     bra    write
  275.  
  276.  
  277. open    move.l    #Mem_read_len,d0
  278.     moveq    #1,d1
  279.     callexec    _LVOAllocMem,execbase
  280.     move.l    d0,mem_read1_base(a5)
  281.     beq    no_mem
  282.  
  283.     move.l    #Mem_read_len,d0
  284.     moveq    #1,d1
  285.     callexec    _LVOAllocMem
  286.     move.l    d0,mem_read2_base(a5)
  287.     beq    no_mem
  288.  
  289. open_1    lea    ARG_Name1(a5),a4
  290.     move.l    (a4),d1
  291.     move.l    #1005,d2
  292.     calldos    _LVOopen,dosbase
  293.     move.l    d0,name1_base(a5)
  294.     beq    noopen
  295. seek_1    move.l    d0,d1
  296.     move.l    Arg_Offset1(a5),d0
  297.     beq.s    open_2
  298.     move.l    d0,a0
  299.     move.l    (a0),d2
  300.     moveq    #-1,d3
  301.     calldos    _LVOseek
  302.     tst.l    d0
  303.     bmi    dos_error
  304.  
  305. open_2    lea    ARG_Name2(a5),a4
  306.     move.l    (a4),d1
  307.     move.l    #1005,d2
  308.     calldos    _LVOopen
  309.     move.l    d0,name2_base(a5)
  310.     beq    noopen
  311. seek_2    move.l    d0,d1
  312.     move.l    Arg_Offset2(a5),d0
  313.     beq.s    .next
  314.     move.l    d0,a0
  315.     move.l    (a0),d2
  316.     moveq    #-1,d3
  317.     calldos    _LVOseek
  318.     tst.l    d0
  319.     bmi    dos_error
  320. .next    rts
  321.  
  322.  
  323. *------------------Variablen Felder -----------------------------------------------*
  324.  
  325.  
  326.     dc.b    "$VER: CMP "
  327.     MY_version
  328.     dc.b    " "
  329.     MY_date
  330.     dc.b    0
  331.     even
  332.  
  333.  
  334. dosname    dc.b    "dos.library",0
  335.     even
  336.  
  337. open_cli    dc.b    "*",0
  338.     even
  339.  
  340. Usage_txt    dc.b    "NAME1/A,NAME2/A,OFFSET1/N,OFFSET2/N,QUICK/S,HELP/S",0
  341.     even
  342.  
  343. NoKS20_txt    dc.b    "Need Kickstart version 2.04 or greater.",10,0
  344. NoKS20_txt_len    equ    *-NoKS20_txt-1
  345.     even
  346.  
  347.  
  348. txt_fill_on    dc.b    ""
  349. txt_fill_on_len    equ    *-txt_fill_on-1
  350.     even
  351. txt_fill_off    dc.b    ""
  352. txt_fill_off_len    equ    *-txt_fill_off-1
  353.     even
  354.  
  355.  
  356. Help_txt    dc.w    Help_txt_len
  357.     dc.b    "programmed by Lutz Hanke, in Assembler.",10
  358.     dc.b    "This Programm it Shareware.",10
  359.     dc.b    "This Prog. compares two Files, and printed variation to Shell.",10
  360.     dc.b    "Can used Offests by Files.",10,0
  361. Help_txt_len    equ    *-Help_txt-3
  362.     even
  363.  
  364. no_mem_txt    dc.w    no_mem_txt_len
  365.     dc.b    "No more for MEM",10,0
  366. no_mem_txt_len    equ    *-no_mem_txt-3
  367.     even
  368.  
  369. Break_txt    dc.w    Break_txt_len
  370.     dc.b    "User Break",10,0
  371. Break_txt_len    equ    *-Break_txt-3
  372.     even
  373.  
  374. noopen_txt    dc.b    "'%s' - no Open File",10,0
  375.     even
  376.  
  377. unter_txt    dc.b    "Variation in Byte $%lx",10,0
  378.     even
  379.  
  380. equ_txt    dc.w    equ_txt_len
  381.     dc.b    "Files equate",10,0
  382. equ_txt_len    equ    *-equ_txt-3
  383.     even
  384.  
  385.     end
  386.  
  387.  
  388.